package cn.kilo.domain.model.pay.entity;

import cn.hutool.core.date.DateUtil;
import com.wechat.pay.java.service.payments.h5.model.Amount;
import com.wechat.pay.java.service.payments.jsapi.model.Payer;
import lombok.Builder;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;

/**
 * @author kilok
 * 微信向回调url发送请求所携带的请求体body
 */
@Data
@Builder
public class WeChatPayCallBackSuccessData {


    private String appid;

    private String mchid;
    /*
    订单号
     */
    private String outTradeNo;



    /*
    微信支付系统生成的订单号
     */
    private String transactionId;

    /*
    交易状态
     * SUCCESS：支付成功
     * REFUND：转入退款
     * NOTPAY：未支付
     * CLOSED：已关闭
     * REVOKED：已撤销（付款码支付）
     * USERPAYING：用户支付中（付款码支付）
     * PAYERROR：支付失败(其他原因，如银行返回失败)
     */
    private String tradeState;

    /*
    交易状态描述
     */
    private String tradeStateDesc;

    /*
    银行类型
     */
    private String bankType;

    /*
    支付完成时间
    支付完成时间，遵循rfc3339标准格式.
    格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE.
    yyyy-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，
    HH:mm:ss表示时分秒，
    TIMEZONE表示时区（+08:00表示东八区时间，领先UTC 8小时，即北京时间）。
    例如：2015-05-20T13:29:35+08:00表示，北京时间2015年5月20日 13点29分35秒。
     */
    private Date successTime;

    /*
    支付类型* JSAPI：公众号支付
     * NATIVE：扫码支付
     * APP：APP支付
     * MICROPAY：付款码支付
     * MWEB：H5支付
     * FACEPAY：刷脸支付
     */
    private String tradeType;

    /*
    支付者信息
     */
    private Payer payer;

    /*
    订单金额信息
     */
    private Amount amount;

    public Date getSuccessTime(){
        return successTime;
    }
    public void setSuccessTime(String successTime){
        // Hutool工具包的方法，自动识别一些常用格式的日期字符串
        this.successTime= DateUtil.parse(successTime);
    }
}
